package upis.pf.DAO;

import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import upis.pf.DTO.IngredienteDTO;
import upis.pf.DTO.PratoDTO;
import upis.pf.DTO.ProdutoDTO;

public class ProdutoDAO {
	
	/*
	 * Retorna a lista de produtos registrados
	 */
	// TODO Avaliar tipo de retorno
	public ProdutoDTO consultar(ProdutoDTO paramConsulta) {
		ProdutoDTO resultado;
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		
		resultado = em.find(ProdutoDTO.class, paramConsulta.getCodproduto());
		
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		return resultado;
	}
	
	/*
	 * Retorna a lista de todos produtos registrados
	 */
	// TODO Avaliar tipo de retorno
	public ArrayList<ProdutoDTO> listar() {
		ArrayList<ProdutoDTO> resultado;
		
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		Session session = (Session) em.getDelegate();  
		Criteria criteria = session.createCriteria(ProdutoDTO.class);  
		
		resultado =  (ArrayList<ProdutoDTO>) criteria.list();
		
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		return resultado;
	}
	
	/*
	 * Inserir um produto
	 */
	public void incluir(ProdutoDTO produto) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		em.persist(produto);
		
		//PratoDTO prato = new PratoDTO();
		//prato.setNome("Prato gostoso");
		//ArrayList<IngredienteDTO> ing = new ArrayList<IngredienteDTO>();
		//ing.add(new IngredienteDTO().set)
		
		em.getTransaction().commit();
		em.close();
		emf.close();
		
	}
	
	public void excluir(ProdutoDTO produto) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Gerstok");
		EntityManager em = emf.createEntityManager();
		
		em.getTransaction().begin();
		
		ProdutoDTO p = em.find(ProdutoDTO.class, produto.getCodproduto());
		
		em.remove(p);
		
		em.getTransaction().commit();
		em.close();
		emf.close();
	}
	
	public void alterar(ProdutoDTO produto) {
		
	}
}
